// pages/search/searchTest/searchTest.js
Page({
  /**
   * 页面的初始数据
   */
  data: {
    searchQuery: '',//输入框内容 监听
    searchTimeout: null,//定时器 用于防抖
    history: [],//历史记录 用缓存去实现
    tests: [],
    offset: 0,
    limit: 20,
    hasMore: true,
    isLoading: false
  },

  onSearchInput: function (e) {
    const value = e.detail.value;//设置变量保存输入框传进来的值
    console.log("搜索输入:", value);
    this.setData({
      searchQuery: value
    });
    
    //防抖
    // 清除之前的定时器
    if (this.data.searchTimeout) {
      clearTimeout(this.data.searchTimeout);
    }

    // 设置新的定时器
    const timeout = setTimeout(() => {
      this.performSearch(value, true);
    }, 500); // 500ms 后执行搜索

    //更新定时器
    this.setData({
      searchTimeout: timeout
    });
  },

  performSearch: function (query, isNewSearch = false) {
    if (!query) {
      this.setData({
        tests: [],
        offset: 0,
        hasMore: false
      });
      return;
    }

    if (isNewSearch) {
      this.setData({
        offset: 0,
        tests: []
      });
    }

    if (this.data.isLoading || (!this.data.hasMore && !isNewSearch)) {
      return;
    }

    this.setData({ isLoading: true });

    wx.request({
      //传入后端的接口
      url: 'http://localhost:8080/api/search/tests/getTests',
      data: {
        query: query,
        offset: this.data.offset,
        limit: this.data.limit
      },
      success: (res) => {
        if (res.statusCode === 200) {
          console.log(res);
          //.map可以直接遍历拿到的数组
          const newTests = res.data.tests.map(test => ({
            id: test.id,
            image: test.image,
            title: test.title
          }));

          this.setData({
            tests: [...this.data.tests, ...newTests],
            offset: this.data.offset + newTests.length,
            hasMore: res.data.hasMore
          });

          if (isNewSearch) {
            // 更新搜索历史
            this.updateSearchHistory(query);
          }
        } else {
          console.error('搜索请求失败:', res);
          wx.showToast({
            title: '搜索失败，请稍后重试',
            icon: 'none'
          });
        }
      },
      fail: (err) => {
        console.error('搜索请求错误:', err);
        wx.showToast({
          title: '网络错误，请检查网络连接',
          icon: 'none'
        });
      },
      complete: () => {
        this.setData({ isLoading: false });
      }
    });
  },
  onHistoryItemTap: function (e) {
    console.log("点击历史记录", e);
    const query = e.currentTarget.dataset.query;
    this.setData({
      searchQuery: query
    });
    this.performSearch(query, true)
  },

  updateSearchHistory: function (query) {
    let history = this.data.history;
    // 移除已存在的相同查询
    history = history.filter(item => item !== query);
    // 将新查询添加到开头
    history.unshift(query);
    // 只保留最近的10条记录
    history = history.slice(0, 10);
    this.setData({ history: history });
    // 可以在这里将历史记录保存到本地存储
    wx.setStorageSync('searchHistory', history);
  },

  onCancel: function () {
    this.setData({
      searchQuery: '',
      tests: [],
      offset: 0,
      hasMore: true
    });
    wx.navigateBack();
  },

  clearHistory: function () {
    this.setData({ history: [] });
    // 清除本地存储的搜索历史
    wx.removeStorageSync('searchHistory');
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function () {
    // 从本地存储加载搜索历史
    const history = wx.getStorageSync('searchHistory') || [];
    this.setData({ history: history });
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {

  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {
    this.performSearch(this.data.searchQuery, true);
    wx.stopPullDownRefresh();
  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {
    if (this.data.hasMore && !this.data.isLoading) {
      this.performSearch(this.data.searchQuery);
    }
  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {

  }
})